EVGAP-02:契约修订至 v0.2.0,运行降级为检索候选层(EVGAP-02 未解除) - #62
Conversation
Executed the Tier 1 extraction authorised by PR #61, whose only blocker was its own approval. Every artefact is external; this PR carries a handoff and a worklog entry. Reachability was tested before executing, because the contract makes an unreachable source a recorded fact rather than a silent skip. All six required endpoints answered: PubMed and PMC via NCBI E-utilities, ClinicalTrials.gov API v2, GEO via E-utilities db=gds, TCGA via the GDC genes API, and the Human Protein Atlas search API. 451 searches, zero unreachable, 41 of 41 targets complete at endpoint granularity, and all 369 pairs complete on the class D layer. LOCK-03 came out at 168 L3-02 retain/active, 192 L3-03 defer/hold and 9 L3-05 EXCLUDE_FROM_ACTIVE_POOL/reactivation-eligible. L3-01 and L3-04 are vacuous this run: no pair had an incomplete search and no other-cancer-only evidence was collected. The canonical context retains 40 of 41 targets because it needs only A/B/C evidence; the eight subgroups retain between 6 and 33 because each also needs class D context enrichment, and that gap is exactly what the 192 holds are. Evidence strength, stated plainly rather than buried: all 7,067 rows are machine_retrieved_requires_human_review with evidence_direction unknown. They are public records retrieved by the frozen queries, with PMIDs, PMCIDs, NCT numbers and GEO accessions that resolve, but their contents were not read. Under DECISION-02, accepted in PR #58, machine-retrieved evidence satisfies LOCK-03 existence while barring the pair from Level 02. So the 168 active pairs mean a CRC-specific linkage record exists pending review, not that linkage is established. Only EDBN reached L3-05 across all nine contexts, and that outcome is reversible: not scientific disproof, not killed, reactivation-eligible, still in the Eligible Universe Index. One defect of mine, found by self-check and repaired: the first evidence table lacked pair_id, clinical_context_id, context_specific and linkage_outcome, and because A/B/C are searched once per target a single row could not carry a unique pair_id, leaving VAL-L16 unsatisfiable. I had not aligned "searched per target" with "recorded per pair". Fixed by conforming the output to the frozen schema rather than amending the contract: target-level records were expanded into 7,067 pair-level rows with no network call repeated and no retrieved fact altered. All twenty contract validation rules VAL-L01 through VAL-L20 were checked against the actual artefacts and all passed. The package is at external:result/gen_iet_evgap_02_crc_linkage_20260805T190453Z.zip, 148063 bytes, SHA-256 9c9c184e7b66e2999950831a18e059847c3b7dfd4a5b6f92ac78ac9dce259ece. No Gate run, no score, no T2 or T7 assessment, no ranking, no Tier, no asset or experimental recommendation, no target or context added, no Tier 2 database opened, no quarantined artefact used. EVGAP-02 is NOT lifted by this PR and EVGAP-01 is untouched, so Level 01 remains unexecutable. 338 tests pass. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…act to v0.2.0 PR #62 review: the run registered search hits as linkage evidence. Verified against the actual files first — every point holds. All 7,067 rows carried evidence_direction=unknown, and no assertion-bearing field was populated anywhere: prevalence empty in all rows, is_adc_efficacy_evidence false in all, protein_or_rna unresolved in all 5,699 literature rows. Not one extracted assertion. Root cause is the contract. v0.1.0 required evidence_direction as a column but no rule required it to be resolved, and nothing constrained where linkage_class came from — so it came from the query category. A fully compliant run therefore produced 168 RETAIN. Contract v0.2.0 adds the missing layer: L-RETRIEVAL / L-ASSERTION / L-DISPOSITION, six assertion elements with assertion_direction=unknown banned, identity_resolution with rule L3-00, per-endpoint admissibility, and VAL-L21..VAL-L28. L3-00 reuses the frozen LOCK-03 outcome linkage_evidence_missing rather than introducing one, because identity_unresolved belongs to LOCK-01's vocabulary. The run is rebuilt as an L-RETRIEVAL product with no network call repeated and no record discarded: 979 distinct records (the 7,067 figure was 979 replicated across 9 contexts), zero assertions, and all 369 pairs deferred — 36 under L3-00 for the four unresolvable entities, 333 under L3-01. EVGAP-02 stays open. GAP-P07 recorded, not fixed: four of the 41 frozen targets are not resolvable protein entities. Fixing the axis here would be a silent axis change. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
第二轮修订:结论成立,已降级为检索候选层,契约修订至 v0.2.0在改动任何东西之前,先对实际文件逐条核验。审核意见全部成立。 比审核描述更彻底的一点不只是 一处需要更正的细节审核说 TCGA 与 HPA 的命中被算作 A 类证据。实测它们没有产生任何证据行—— 一处比审核意见更严重的发现
自查发现、审核未提的第三项缺陷未披露的检索截断。 451 次检索报告命中合计 718,140,实际登记 979 条; 根因在契约,不只在执行v0.1.0 把 契约 v0.2.0
结果降级(revision 2)
未重复任何网络调用、未丢弃任何已检索记录。 上游缺陷
|
Second PR #62 review: revision 2 assigned CA19-9 to L3-00 although the contract declares it resolved_as_non_protein_antigen — a status search_complete accepts. The contradiction is direct and the review is right. Root cause was mine: the contract table was named known_unresolved_entities but held one resolved entity, and the rebuild script keyed L3-00 on membership in that table rather than on resolution_status. Fixed at the failure point: table renamed known_identity_findings, l3_00_statuses added explicitly, l3_00_membership_test set to resolution_status, l3_00_membership_by_list_forbidden set true, and every entry now declares the lock_03_rule its status implies so the two cannot drift apart. CA19-9 keeps its resolved status and moves to L3-01. Its pairs defer because the assertion layer has not run and because a gene-symbol query is an invalid form for a glycan antigen — not because the identity is unknown. New section non_protein_antigen_search_requirements and rule VAL-L29 record that. Revision 3: L3-00 27, L3-01 342. Still zero RETAIN, zero EXCLUDE, 369 hold, empty assertion table, 979 candidates unchanged, no network call repeated. GAP-P07 sharpened: the four entities are not one kind of defect. Whether a resolved non-protein antigen belongs in a membrane-protein target universe is the actual upstream question. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
第三轮修订:CA19-9 的 L3-00 误判已修正(27 / 342)审核意见成立。契约把 根因在我自己的命名与实现契约那张表叫 所以我修在失效点而不是症状:
采用方案一
新增 revision 3 结果
仍是 0 RETAIN、0 EXCLUDE、369 hold,三组 refs 全空,assertion 表空,
|
PR #63 review: the audit's core facts all come from files outside the repository, and the in-repo tests only prove the audit document is internally consistent. That is correct, and it is the same standard I applied to myself in PR #62. The bundle ships the builder source, both manifests, the checksum list, the raw verification result, all three processed tables in full, the 41-target axis, and a verifier. Running verify_audit.py recomputes 48 audit facts from the bundle alone and reports each as MATCH or MISMATCH. All 48 match. The tables are not subset. Subsetting would leave the 11,334 counterexample and the duplicate-key counts unverifiable, putting the reviewer back to trusting the narrative. 2.6 MB compressed is a fair price. One limit stated rather than hidden: the 19 raw files are not shipped, so AUD-09's byte-level verification cannot be redone inside the bundle. Their digests were recomputed at audit time and are recorded. That limit is COND-03, already declared, not a new one. Recomputing found a wording problem. "11,334 genes with an HPA row but hpa_plasma_membrane=false" is right — HPA covers 13,597 genes and 11,334 of them are false — but 18,534 consensus rows carry that value, most because HPA never covered the gene. The phrase "with an HPA row" carried the whole distinction. All three figures are now reported and the test requires them. Under either reading, zero genes wrongly credit the imaging family, so AUD-05 stands. AUD-01's builder path was also ambiguous: it lives in the sibling AssetGenOS repository, not inside StelligenOS. Corrected, and a copy ships in the bundle. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…2-extraction-result # Conflicts: # logs/worklog.md
… exact external review package requested in the previous review. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
ChatGPT APPROVE at a39171f. Records only. No change to docs/pools, tests, contracts, the target axis or any execution logic. admission_record_ref stays null, authorises_extraction_run stays false, neither gap is lifted. The reviewer's formal review again returned 403 from the GitHub connector, so the two files merged here remain the only durable record of the #62 and #63 decisions.
本轮只补正式受审包,未改任何语义
契约
v0.2.0未动、tests/未动、disposition 逻辑未动、无新 finding、无新规则、未改 target 轴、未补 admission binding、未执行
EVGAP-01、未解除EVGAP-02。本轮仓库侧改动仅两处:handoff 的包信息段、一条 worklog。
唯一正式受审包
gen_iet_evgap_02_crc_linkage_20260805T190453Z_rev3.zip81baa45f23f180c68b16d18c83284b60bdee725c017e668e590d4e80b04176e9上一版声明的
ef268fd2…作废——包内新增verify_package.py,内容变了哈希必然变。handoff、本 PR body、
source_manifest.json三处写的是同一个文件名、同一个 SHA-256、同一个文件数、同一个 revision。
包内数据
Undisclosed/EDBN/AG7:各 9 个 pair,全部L3-00CA19-9:9 个 pair 全部L3-01,identity_resolution_status = resolved_as_non_protein_antigenretrieval_candidates.tsv:record_status = retrieved_candidate、linkage_validated = false、may_support_lock_03 = false,不含linkage_class列supporting_evidence_refs/class_d_evidence_refs/other_cancer_evidence_refs)在 369 行中全部为空
may_advance_to_level_02 = false包内自带验证脚本
只读包内文件,无网络、无写入、不依赖包外路径,解压即可运行,退出码
0表示全通过。一次性检查:ZIP 与逐文件哈希、字节数、文件数、清单未遗漏文件、schema、
979 / 0 / 369、27 / 342、其余四条规则为0、CA19-9、三组 refs 全空、无 RETAIN/EXCLUDE、
EVGAP-02未解除。从全新解压目录实测(含 ZIP 哈希校验):
65/65 MATCH,退出码 0。一处上一版 handoff 的笔误已更正
pair_linkage_disposition.tsv曾被写成4c4def27…,那其实是run_report.md的哈希。真实值
33674913…。本轮哈希表由source_manifest.json直接生成,不再手抄。状态未变
EVGAP-02未解除。ADC_POOL_LEVEL_01_ACCEPTED不成立。